package com.example;

/**
 * 目标：开发一个简易的斗地主游戏 完成做牌和洗牌
 */
public class ArrayTest4 {
    public static void main(String[] args) {
        start();
    }

    public static void start() {
        // 1.洗牌：创建一个动态初始化的数组存储54张牌
        String[] poker = new String[54];
        // poker = [null , null , null , null ...]

        // 2.准备四种花色，还有点数，在开始做派存入数组中
        String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        String[] colors = {"♥", "♦", "♣", "♠"};

        // 3.遍历点数，在遍历花色
        int index = 0; // 定义一个变量记录牌存储的索引位置
        for (int i = 0; i < numbers.length; i++) {
            // 当前点数: numbers[i]
            for (int j = 0; j < colors.length; j++) {
                // 4.把点数和花色拼接，存入数组中
                poker[index++] = colors[j] + numbers[i];
            }
        }

        // 5.将大小王存入数组中
        poker[index++] = "小王";
        poker[index] = "大王";

        // 6.打印牌
        for (int i = 0; i < poker.length; i++) {
            System.out.print(poker[i] + "\t");
        }
        System.out.println();

        // 7.洗牌：打乱数组顺序
        /*
        思路分析：
        1.如何实现打乱数组顺序
          随机生成两个索引 生成0-53的随机数
          每次交换两个索引对应的元素
          循环结束后，数组中的元素就乱序了 即完成洗牌
         */
        for (int i = 0; i < poker.length; i++) {
            // 随机获取一个索引
            int index1 = (int) (Math.random() * poker.length);
            // 随机获取一个索引
            int index2 = (int) (Math.random() * poker.length);

            // 交换两个索引对应的元素
            String temp = poker[index1];
            poker[index1] = poker[index2];
            poker[index2] = temp;
        }

        System.out.println("洗牌后：");
        for (int i = 0; i < poker.length; i++) {
            System.out.print(poker[i] + "\t");
        }
    }
}
